/*
 * Spider.hpp
 *
 *  Created on: 2010-4-25
 *      Author: anod
 */

#ifndef SPIDER_HPP_
#define SPIDER_HPP_

#include <QString>

#include <EventSender.hpp>

class SpiderImpl;

namespace AppData
{

class Spider:public EventSender
{
public:
	Spider();
	virtual ~Spider();

	// $$外部接口
public:
	/**
	 * 函数功能：从url把文件内容读取到buffer中，为了不障碍UI操作，使用异步方式进行
	 * @url 资源url必须是http协议的网络资源，如果在url中不带上协议类型，默认是http
	 * @buffer 内容缓冲区，不能为NULL
	 * @buflen 缓冲区长度
	 * 发送事件：完成下载，发送IOEvent事件LOAD_FINISH，下载失败，发送IOEvent事件LOAD_FAILED
	 */
	void          grab(const QString &url, unsigned char *buffer, size_t buflen);
	/**
	 * 函数功能：与grab相似,不同点在于：
	 *       1 对于同一个url，如果已经有过下载，则不会再进行二次下载
	 *       2 @url可以是本地资源，也就是file://下的资源url，而且默认为本地资源请求
	 *       3 @buffer可以为空，这样可以只进行文件下载而不进行文件读取
	 * 返回值：保存在本地的临时文件名（绝对路径）
	 * 发送事件：完成下载，发送IOEvent事件LOAD_FINISH，下载失败，发送IOEvent事件LOAD_FAILED
	 */
	const char*   download(const QString &url, unsigned char *buffer, size_t buflen);
private:
	SpiderImpl *impl_;
};

}
#endif /* SPIDER_HPP_ */
